<?php
/**
 * PddPreset.php class file.
 * @author wudg <544038230@qq.com>
 * @date 2021/1/8- 上午11:20
 */

namespace common\jobs\copy\tools;


use common\helpers\CopyHelper;

class PddPreset
{


    /**
     * 将品牌置空
     * @param array $attr
     * @return array
     */
    public static function brandEmpty(array $attr)
    {
        foreach($attr as $k => $item)
        {
            if($item['key'] == '品牌')
            {
                unset($attr[$k]);
            }
        }

        return $attr;
    }


    /**
     * 属性强制预设,只设置一级属性
     * @param array $props
     * @param array $attr
     * @param array $filter
     * @return array
     */
    public static function attrCompulsory(array $props,array $attr, array $filter)
    {

        foreach($props as $k => $prop)
        {
            self::SalesProp($attr,$prop,$filter);
        }
        return $attr;
    }


    /**
     * 非销售属性强制预设
     * @param array $sourceAttr
     * @param array $prop
     * @param array $filter
     */
    private static function SalesProp(array &$sourceAttr,array $prop,array $filter)
    {
        //已设置的属性
        $setAttrs = array_column($sourceAttr,'out_property_name');
        foreach($filter as $k => $item)
        {
            //品牌不做处理
            if($item['attr_name'] == '品牌') continue;
            if($item['checked'] && $prop['name_alias'] ==$item['attr_name'])
            {
                //找到该属性并且设置了有则跳过的 跳过当前循环
                if (in_array($item['attr_name'],$setAttrs) && $item['attr_type'] == 2)
                {
                    continue;
                }
                //直接覆盖原有属性值
                if(isset($prop['values']) && is_array($prop['values']))
                {
                    foreach($prop['values'] as $_k => $_item)
                    {
                        //choose_max_num
                        $attrValue = explode(',',$item['attr_value']);
                        if(count($attrValue))
                        {
                            if(in_array($_item['value'],$attrValue))
                            {
                                $tmp = [];
                                $tmp['ref_pid'] =$prop['ref_pid'];
                                $tmp['template_pid'] =$prop['id'];
                                $tmp['value'] = $_item['value'];
                                $tmp['out_property_name'] =$prop['name_alias'];
                                $tmp['vid'] =$_item['vid'];
                                $tmp['value_unit'] =CopyHelper::getUnit($prop['value_unit'] ?? '',$_item['value']);
                                /**
                                 * 已经匹配上了 将原来匹配上的删除掉
                                 */
                                self::checkInAttr($sourceAttr,$tmp);
                            }
                        }
                    }
                }else{
                    //不存在values节点，则为手填写属性
                    $tmp = [];
                    $tmp['ref_pid'] = $prop['ref_pid'];
                    //属性值类型（0-文本、1-数值、4-绝对时间、5-相对时间）
                    switch (@$prop['value_type'])
                    {
                        case 1: //数值
                            $tmp['value'] = intval($item['attr_value']);
                            break;
                        case 0:
                            $tmp['value'] = trim($item['attr_value']);
                            break;
                    }
                    switch (@$prop['control_type']) {
                        case 12:
                            $tmp['value'] =  trim($item['attr_value']);
                            break;
                        case 13:
                            $tmp['value'] =  trim($item['attr_value']);
                            break;
                    }
                    $tmp['template_pid'] = $prop['id']; //增加属性id返回
                    $tmp['out_property_name'] = $prop['name_alias'];
                    $tmp['vid'] = null;
                    $tmp['value_unit'] = CopyHelper::getUnit($prop['value_unit'] ?? '',$item['attr_value']);
                    self::checkInAttr($sourceAttr,$tmp);
                }
            }
        }
    }


    /**
     * 检查是否设置过该类目
     * @param $sourceAttr
     * @param $tmp
     */
    private static function checkInAttr(&$sourceAttr,$tmp)
    {
        foreach($sourceAttr as $k => $item)
        {
            if($item['template_pid'] == $tmp['template_pid'])
            {
                unset($sourceAttr[$k]);
                break;
            }
        }
        array_push($sourceAttr,$tmp);
    }
}